package model

import (
	"github.com/go-gin-admin/global"
)

// 定义字典方法
type IDict interface {
	Insert() (int64, error)                                       // 增加字典
	GetList(pageIndex int64, pageSize int64) (interface{}, error) // 获取字典分页列表
	Update() error                                                // 更新字典
	Remove(id int64) error                                        // 删除字典
}

// 字典结构体
type Dict struct {
	Id          int64  `json:"id" gorm:"primary_key"`       // 主键
	Type        string `json:"type"`                        // 字典类型
	Description string `json:"description"`                 // 字典描述
	Remarks     string `json:"remarks"`                     // 备注信息
	System      string `json:"system"`                      // 是否系统内置 0 业务类 1 系统类
	DelFlag     string `json:"del_flag" gorm:"default:'0'"` // 删除标记,1:已删除,0:正常
	BaseModel
}

// 添加字典
func (d *Dict) Insert() (int64, error) {
	table := global.GDB.Table("sys_dict")
	if err := table.Create(&d).Error; err != nil {
		return 0, err
	}
	return d.Id, nil
}

// 获取字典
func (d *Dict) GetList(pageIndex int64, pageSize int64) (interface{}, error) {
	var dicts []Dict
	var total int64
	table := global.GDB.Table("sys_dict")
	table = table.Select("id, type, description, create_time, update_time, remarks, system, del_flag")
	table = table.Where("del_flag = ?", "0")
	if err := table.Count(&total).Error; err != nil {
		return dicts, err
	}
	table = table.Offset((pageIndex - 1) * pageSize).Limit(pageSize)
	if err := table.Find(&dicts).Error; err != nil {
		return dicts, err
	}

	m := make(map[string]interface{})
	m["item"] = dicts
	m["total"] = total
	return m, nil
}

// 更新字典
func (d *Dict) Update() error {
	table := global.GDB.Table("sys_dict")
	table = table.Where("id = ?", d.Id)
	if err := table.Updates(map[string]interface{}{"type": d.Type, "description": d.Description, "remarks": d.Remarks, "update_time": d.UpdateTime, "system": d.System}).Error; err != nil {
		return err
	}
	return nil
}

func (d *Dict) Remove(id int64) error {
	table := global.GDB.Table("sys_dict")
	table = table.Where("id = ?", id)
	if err := table.Update("del_flag", "1").Error; err != nil {
		return err
	}
	return nil
}
